var ICAL = {
  "Binary": {
    "fromString": function(aString) {},
    "decodeValue": function() {},
    "setEncodedValue": function(aValue) {},
    "toString": function() {}
  },
  "Component": {
    "name": {},
    "fromString": function(str) {},
    "addProperty": function(property) {},
    "addPropertyWithValue": function(name, value) {},
    "addSubcomponent": function(component) {},
    "getAllProperties": function(name) {},
    "getAllSubcomponents": function(name) {},
    "getFirstProperty": function(name) {},
    "getFirstPropertyValue": function(name) {},
    "getFirstSubcomponent": function(name) {},
    "hasProperty": function(name) {},
    "removeAllProperties": function(name) {},
    "removeAllSubcomponents": function(name) {},
    "removeProperty": function(nameOrProp) {},
    "removeSubcomponent": function(nameOrComp) {},
    "toJSON": function() {},
    "toString": function() {},
    "updatePropertyWithValue": function(name, value) {}
  },
  "ComponentParser": {
    "process": function(ical) {}
  },
  "Duration": {
    "fromData": function() {},
    "fromSeconds": function() {},
    "fromString": function() {},
    "isValueString": function() {},
    "clone": function() {},
    "compare": function() {},
    "normalize": function() {},
    "reset": function() {},
    "toICALString": function() {},
    "toSeconds": function() {},
    "toString": function() {}
  },
  "Event": {
    "findRangeException": function() {},
    "getOccurrenceDetails": function() {},
    "getRecurrenceTypes": function() {},
    "isRecurrenceException": function() {},
    "isRecurring": function() {},
    "iterator": function() {},
    "modifiesFuture": function() {},
    "relateException": function() {},
    "toString": function() {}
  },
  "ParserError": {},
  "Period": {
    "fromData": function() {},
    "fromJSON": function() {},
    "fromString": function() {},
    "clone": function() {},
    "getDuration": function() {},
    "getEnd": function() {},
    "toICALString": function() {},
    "toJSON": function() {},
    "toString": function() {}
  },
  "Property": {
    "fromString": function() {},
    "getDefaultType": function() {},
    "getFirstValue": function() {},
    "getParameter": function() {},
    "getValues": function() {},
    "removeAllValues": function() {},
    "removeParameter": function() {},
    "resetType": function() {},
    "setParameter": function() {},
    "setValue": function() {},
    "setValues": function() {},
    "toICALString": function() {},
    "toJSON": function() {}
  },
  "Recur": {
    "_stringToData": function() {},
    "fromData": function() {},
    "fromString": function() {},
    "icalDayToNumericDay": function() {},
    "numericDayToIcalDay": function() {},
    "addComponent": function() {},
    "clone": function() {},
    "getComponent": function() {},
    "getNextOccurrence": function() {},
    "isByCount": function() {},
    "isFinite": function() {},
    "iterator": function() {},
    "setComponent": function() {},
    "toJSON": function() {},
    "toString": function() {}
  },
  "RecurExpansion": {
    "fromData": function() {},
    "next": function() {},
    "toJSON": function() {}
  },
  "RecurIterator": {
    "fromData": function() {},
    "next": function() {},
    "toJSON": function() {}
  },
  "Time": {
    "daysInMonth": function() {},
    "fromData": function() {},
    "fromDateString": function() {},
    "fromDateTimeString": function() {},
    "fromDayOfYear": function() {},
    "fromJSDate": function() {},
    "fromString": function() {},
    "fromStringv2": function() {},
    "getDominicalLetter": function() {},
    "isLeapYear": function() {},
    "now": function() {},
    "weekOneStarts": function() {},
    "addDuration": function() {},
    "adjust": function() {},
    "clone": function() {},
    "compare": function() {},
    "compareDateOnlyTz": function() {},
    "convertToZone": function() {},
    "dayOfWeek": function() {},
    "dayOfYear": function() {},
    "endOfMonth": function() {},
    "endOfWeek": function() {},
    "endOfYear": function() {},
    "fromUnixTime": function() {},
    "isNthWeekDay": function() {},
    "nthWeekDay": function() {},
    "reset": function() {},
    "resetTo": function() {},
    "startDoyWeek": function() {},
    "startOfMonth": function() {},
    "startOfWeek": function() {},
    "startOfYear": function() {},
    "subtractDate": function() {},
    "subtractDateTz": function() {},
    "toICALString": function() {},
    "toJSDate": function() {},
    "toJSON": function() {},
    "toString": function() {},
    "toUnixTime": function() {},
    "utcOffset": function() {},
    "weekNumber": function() {}
  },
  "Timezone": {
    "convert_time": function() {},
    "fromData": function() {},
    "toString": function() {},
    "utcOffset": function() {}
  },
  "UtcOffset": {
    "fromSeconds": function() {},
    "fromString": function() {},
    "clone": function() {},
    "compare": function() {},
    "fromData": function() {},
    "toICALString": function() {},
    "toSeconds": function() {},
    "toString": function() {}
  },
  "VCardTime": {
    "clone": function() {},
    "fromDateAndOrTimeString": function() {},
    "toICALString": function() {},
    "toString": function() {},
    "addDuration": function() {},
    "adjust": function() {},
    "compare": function() {},
    "compareDateOnlyTz": function() {},
    "convertToZone": function() {},
    "dayOfWeek": function() {},
    "dayOfYear": function() {},
    "endOfMonth": function() {},
    "endOfWeek": function() {},
    "endOfYear": function() {},
    "fromData": function() {},
    "fromJSDate": function() {},
    "fromUnixTime": function() {},
    "getDominicalLetter": function() {},
    "isNthWeekDay": function() {},
    "nthWeekDay": function() {},
    "reset": function() {},
    "resetTo": function() {},
    "startDoyWeek": function() {},
    "startOfMonth": function() {},
    "startOfWeek": function() {},
    "startOfYear": function() {},
    "subtractDate": function() {},
    "subtractDateTz": function() {},
    "toJSDate": function() {},
    "toJSON": function() {},
    "toUnixTime": function() {},
    "utcOffset": function() {},
    "weekNumber": function() {}
  },
  "parse": {
    "_rfc6868Escape": function() {},
    "component": function() {},
    "property": function() {}
  },
  "stringify": {
    "component": function() {},
    "multiValue": function() {},
    "property": function() {},
    "propertyValue": function() {},
    "value": function() {}
  },
  "design": {
    "getDesignSet": function() {}
  },
  "helpers": {
    "binsearchInsert": function() {},
    "clone": function() {},
    "extend": function() {},
    "foldline": function() {},
    "formatClassType": function() {},
    "inherits": function() {},
    "isStrictlyNaN": function() {},
    "pad2": function() {},
    "strictParseInt": function() {},
    "trunc": function() {},
    "unescapedIndexOf": function() {}
  },
  "TimezoneService": {
    "get": function() {},
    "has": function() {},
    "register": function() {},
    "remove": function() {}
  }
}
